using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;

namespace Agricultural_Sales.ASP
{
    public partial class Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                // 清空消息
                lblErrorMessage.Text = "";
                lblSuccessMessage.Text = "";

                // 检查是否是从首页链接过来的，如果是则不自动登录
                string referrer = Request.UrlReferrer?.ToString() ?? "";
                bool isFromHomePage = referrer.ToLower().Contains("/home.aspx") ||
                                     referrer.ToLower().Contains("/default.aspx");

                // 只有在不是从首页过来的情况下才检查自动登录
                if (!isFromHomePage && Session["UserId"] != null)
                {
                    string userType = Session["UserType"]?.ToString();
                    if (userType == "管理员")
                    {
                        Response.Redirect("Admin.aspx");
                    }
                    else
                    {
                        Response.Redirect("../Default.aspx");
                    }
                }
                else if (isFromHomePage)
                {
                    // 如果是从首页过来的，清除会话确保以游客身份登录
                    Session.Clear();
                }
            }
        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            try
            {
                string userName = txtUserName.Text.Trim();
                string password = txtPassword.Text.Trim();
                string loginType = hfLoginType.Value; // user 或 admin

                // 验证输入
                if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))
                {
                    ShowError("用户名和密码不能为空！");
                    return;
                }

                // 根据登录类型确定用户类型
                string expectedUserType = loginType == "admin" ? "管理员" : "普通用户";

                // 验证用户登录
                if (ValidateUser(userName, password, expectedUserType))
                {
                    // 登录成功，设置Session
                    SetUserSession(userName, expectedUserType);

                    // 根据用户类型跳转
                    if (expectedUserType == "管理员")
                    {
                        ShowSuccess("管理员登录成功！正在跳转到管理后台...");
                        // 使用JavaScript延迟跳转，让用户看到成功消息
                        ClientScript.RegisterStartupScript(this.GetType(), "redirect",
                            "setTimeout(function(){ window.location.href='./Admin.aspx'; }, 1500);", true);
                    }
                    else
                    {
                        ShowSuccess("用户登录成功！正在跳转到首页...");
                        ClientScript.RegisterStartupScript(this.GetType(), "redirect",
                            "setTimeout(function(){ window.location.href='./Home.aspx'; }, 1500);", true);
                    }
                }
                else
                {
                    ShowError("用户名或密码错误，或者您没有" + (expectedUserType == "管理员" ? "管理员" : "用户") + "权限！");
                }
            }
            catch (Exception ex)
            {
                ShowError("登录过程中发生错误：" + ex.Message);
            }
        }

        // 验证用户登录信息
        // 参数说明：
        // userName - 用户输入的用户名
        // password - 用户输入的密码
        // userType - 用户类型（"管理员" 或 "普通用户"）
        // 返回值：如果用户名、密码和用户类型匹配则返回true，否则返回false
        private bool ValidateUser(string userName, string password, string userType)
        {
            // 从配置文件中获取数据库连接字符串，使用正确的连接字符串名称
            string connectionString = ConfigurationManager.ConnectionStrings["AgriculturalSalesConnectionString"]?.ConnectionString;

            // 如果没有配置连接字符串，使用默认的LocalDB连接字符串
            if (string.IsNullOrEmpty(connectionString))
            {
                connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\AgriculturalSales.mdf;Integrated Security=True";
            }

            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    string sql = "SELECT COUNT(*) FROM Users WHERE UserName = @UserName AND Password = @Password AND UserType = @UserType";

                    using (SqlCommand cmd = new SqlCommand(sql, conn))
                    {
                        cmd.Parameters.AddWithValue("@UserName", userName);
                        cmd.Parameters.AddWithValue("@Password", password);
                        cmd.Parameters.AddWithValue("@UserType", userType);

                        int count = (int)cmd.ExecuteScalar();
                        return count > 0;
                    }
                }
            }
            catch (Exception ex)
            {
                // 记录错误日志（这里简单处理）
                System.Diagnostics.Debug.WriteLine("数据库连接错误：" + ex.Message);
                throw new Exception("数据库连接失败，请联系系统管理员。");
            }
        }

        // 设置用户Session信息
        // 参数说明：
        // userName - 用户名
        // userType - 用户类型
        // 功能：从数据库获取用户完整信息并存储到Session中
        private void SetUserSession(string userName, string userType)
        {
            // 使用正确的连接字符串名称
            string connectionString = ConfigurationManager.ConnectionStrings["AgriculturalSalesConnectionString"]?.ConnectionString;

            if (string.IsNullOrEmpty(connectionString))
            {
                connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\AgriculturalSales.mdf;Integrated Security=True";
            }

            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                string sql = "SELECT UserId, UserName, Phone, UserImagee, Address FROM Users WHERE UserName = @UserName AND UserType = @UserType";

                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@UserName", userName);
                    cmd.Parameters.AddWithValue("@UserType", userType);

                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            Session["UserId"] = reader["UserId"];
                            Session["UserName"] = reader["UserName"];
                            Session["UserType"] = userType;
                            Session["Phone"] = reader["Phone"];
                            Session["UserImage"] = reader["UserImagee"];
                            Session["Address"] = reader["Address"];
                            Session["LoginTime"] = DateTime.Now;
                        }
                    }
                }
            }
        }

        // 显示错误消息
        // 参数说明：
        // message - 要显示的错误消息内容
        // 功能：在页面上显示红色的错误提示信息
        private void ShowError(string message)
        {
            lblErrorMessage.Text = message;
            ClientScript.RegisterStartupScript(this.GetType(), "showError",
                "document.getElementById('errorMessage').style.display = 'block'; document.getElementById('successMessage').style.display = 'none';", true);
        }

        // 显示成功消息
        // 参数说明：
        // message - 要显示的成功消息内容
        // 功能：在页面上显示绿色的成功提示信息
        private void ShowSuccess(string message)
        {
            lblSuccessMessage.Text = message;
            ClientScript.RegisterStartupScript(this.GetType(), "showSuccess",
                "document.getElementById('successMessage').style.display = 'block'; document.getElementById('errorMessage').style.display = 'none';", true);
        }
    }
}